package recognyze.transfomation;

import recognyze.Mask;
import java.util.EnumMap;
import java.util.Map;
import recognyze.FaceImage;
import recognyze.anthropometry.Anthropometry;
import recognyze.anthropometry.BasicHormion;
import recognyze.anthropometry.Vector;

public abstract class Transformer {

    public static Transformation getTransform(FaceImage face, Mask mask) throws TransformationException {
        Map<BasicHormion, Vector> map = new EnumMap<BasicHormion, Vector>(BasicHormion.class);
        Anthropometry faceA = face.getAnthropometry();
        Anthropometry maskA = mask.getAnthropometry();
        if(maskA == null || faceA == null) throw new TransformationException(
                "При создании биекции произошла ошибка: одна из антропометрий равна null");
        if(!maskA.isIsomorphic(faceA)) throw new TransformationException(
                "При создании биекции произошла ошибка: антропометрии не изоморфны");
        for(BasicHormion bh : faceA.getBasicHormions()) {
            Vector v = faceA.getPoint(bh).diff(maskA.getPoint(bh));
            map.put(bh, v);
        }
        return new Transformation(map);
    }

}
